package psrc.bd.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import psrc.logic.util.beans.DefeitoBean;

public class DefeitoDAO extends AbstractDAO {

	public DefeitoDAO(Connection conn) {
		super(conn);
	}

	@Override
	public <T> void adiciona(T _bean) throws SQLException{
		DefeitoBean bean = (DefeitoBean) _bean;
		String sql = "insert into Defeito "
				+ "(fk_cliente, data_defeito, data_envio, data_confirmacao, numero_defeito, observacoes) values (?, ?, ?, ?, ?, ?)";
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);

			stmt.setString(1, bean.getFkCliente());
			stmt.setString(2, bean.getDataDefeito());
			stmt.setString(3, bean.getDataEnvio());
			stmt.setString(4, bean.getDataConfirmacao());
			stmt.setString(5, bean.getNumeroDefeito());
			stmt.setString(6, bean.getObservacoes());
			
			stmt.execute();
			stmt.close();

		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}

	@Override
	public <T> void remove(T _bean) throws SQLException{
		DefeitoBean bean = (DefeitoBean) _bean;
		try {
			PreparedStatement stmt = connection.prepareStatement("delete from Defeito where id_defeito=?");

			stmt.setInt(1, Integer.parseInt(bean.getIdDefeito()));

			stmt.execute();
			stmt.close();

		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}

	@Override
	public <T> void edita(T _bean)  throws SQLException{
		DefeitoBean bean = (DefeitoBean) _bean;

		String sql = "update Defeito set " +"fk_cliente=?, data_defeito=?, data_envio=?, data_confirmacao=?, numero_defeito=?, observacoes=? where defeito=?";
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);

			stmt.setString(1, bean.getFkCliente());
			stmt.setString(2, bean.getDataDefeito());
			stmt.setString(3, bean.getDataEnvio());
			stmt.setString(4, bean.getDataConfirmacao());
			stmt.setString(5, bean.getNumeroDefeito());
			stmt.setString(6, bean.getObservacoes());
			stmt.setInt(7, Integer.parseInt(bean.getIdDefeito()));
			stmt.execute();
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}

	@Override
	public <T> List<T> seleciona() throws SQLException{
		List<DefeitoBean> defeitos = new ArrayList<DefeitoBean>();

		try {
			PreparedStatement stmt = connection.prepareStatement("select * from Defeito");

			ResultSet rs = stmt.executeQuery();

			while (rs.next()) {
				DefeitoBean bean = new DefeitoBean();
				bean.setFkCliente(rs.getString("fk_cliente"));
				bean.setDataDefeito(rs.getString("data_defeito"));
				bean.setDataEnvio(rs.getString("data_envio"));
				bean.setDataConfirmacao(rs.getString("data_confirmacao"));
				bean.setNumeroDefeito(rs.getString("numero_defeito"));
				bean.setObservacoes(rs.getString("observacoes"));
				bean.setIdDefeito(rs.getString("id_defeito"));

				defeitos.add(bean);
			}
			rs.close();
			stmt.close();
			return (List<T>) defeitos;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}

@Override
	public <T> List<T> selecionaPorId(T param) throws SQLException {
		List<DefeitoBean> defeitos = new ArrayList<DefeitoBean>();
		DefeitoBean user = (DefeitoBean) param;
		try {
			PreparedStatement stmt = connection
					.prepareStatement("select * from Defeito where id_defeito=?");
			stmt.setString(1, user.getIdDefeito());
			ResultSet rs = stmt.executeQuery();
			
			while (rs.next()) {
				DefeitoBean bean = new DefeitoBean();
				bean.setFkCliente(rs.getString("fk_cliente"));
				bean.setDataDefeito(rs.getString("data_defeito"));
				bean.setDataEnvio(rs.getString("data_envio"));
				bean.setDataConfirmacao(rs.getString("data_confirmacao"));
				bean.setNumeroDefeito(rs.getString("numero_defeito"));
				bean.setObservacoes(rs.getString("observacoes"));
				bean.setIdDefeito(rs.getString("id_defeito"));

				defeitos.add(bean);
			}
			rs.close();
			stmt.close();
			return (List<T>) defeitos;
		} catch (SQLException e) {
			e.printStackTrace();
			throw e;
		}
	}
}
